﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

using PickGold.Arguments;

namespace PickGold.Handler
{
	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam name="TYPE">该事件生成的事件数据的类型</typeparam>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE>(object sender, EventArgs<TYPE> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1>(object sender, EventArgs<TYPE, T1> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2>(object sender, EventArgs<TYPE, T1, T2> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3>(object sender, EventArgs<TYPE, T1, T2, T3> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3, T4>(object sender, EventArgs<TYPE, T1, T2, T3, T4> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3, T4, T5>(object sender, EventArgs<TYPE, T1, T2, T3, T4, T5> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3, T4, T5, T6>(object sender, EventArgs<TYPE, T1, T2, T3, T4, T5, T6> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3, T4, T5, T6, T7>(object sender, EventArgs<TYPE, T1, T2, T3, T4, T5, T6, T7> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3, T4, T5, T6, T7, T8>(object sender, EventArgs<TYPE, T1, T2, T3, T4, T5, T6, T7, T8> e);

	/// <summary>
	/// 表示将处理事件的方法。
	/// </summary>
	/// <typeparam/>
	/// <param name="sender">事件源</param>
	/// <param name="e">包含事件数据的参数</param>
	[Serializable]
	[ComVisible(true)]
	public delegate void HEventHandler<TYPE, T1, T2, T3, T4, T5, T6, T7, T8, T9>(object sender, EventArgs<TYPE, T1, T2, T3, T4, T5, T6, T7, T8, T9> e);
}
